package com.phaeton.beemeup.updatehandlers;

import java.util.UUID;
import java.util.Map.Entry;

import org.andengine.engine.handler.IUpdateHandler;
import org.andengine.engine.handler.timer.ITimerCallback;
import org.andengine.engine.handler.timer.TimerHandler;
import org.andengine.entity.shape.IShape;

import android.util.Log;

import com.phaeton.beemeup.GameManager;
import com.phaeton.beemeup.entity.Bee;
import com.phaeton.beemeup.entity.Flower;
import com.phaeton.beemeup.entity.IComb;
import com.phaeton.beemeup.entity.IInsect;
import com.phaeton.beemeup.entity.Wasp;
import com.phaeton.beemeup.entity.WaspComb;

public class WaspHandler extends IHandler {

	public WaspHandler(GameManager gameManager) {
		super(gameManager);
	}

	@Override
	public void init() {
		mGameManager.getLevel().registerUpdateHandler(new IUpdateHandler() {

			@Override
			public void onUpdate(float pSecondsElapsed) {

				switch(mGameManager.getWaspCombs().size()){
					case 1:	case 2:	case 3: mGameManager.setMaxWasps(1); break;
					case 4: case 5: case 6: case 7: mGameManager.setMaxWasps(2); break;
					case 8: case 9: case 10: case 11: case 12: mGameManager.setMaxWasps(3); break;
					case 13: case 14: case 15: case 16: case 17: case 18: mGameManager.setMaxWasps(4); break;
					default: mGameManager.setMaxWasps(5); break;
				}
				   
				if(mGameManager.getWasps().size() < mGameManager.getMaxWasps()){
					mGameManager.spawnWasp(mGameManager.getWaspHome().getColumn(), mGameManager.getWaspHome().getRow());
				}
				
				for(Wasp wasp: mGameManager.getWasps().values()) {
					wasp.setAggro((float)(mGameManager.getBees().values().size()-1) / 20);
				}
			}

			@Override
			public void reset() {
				// TODO Auto-generated method stub
				
			}
			
		});
		
//		mGameManager.getLevel().registerUpdateHandler(new IUpdateHandler() {
//			public void onUpdate(float pSecondsElapsed) {
//				double dis_nearest = Double.MAX_VALUE;
//				
//				for(final Entry<UUID, Wasp> entry: mGameManager.mWasps.entrySet()){
//					IShape target;
//					
//					if(entry.getValue().getState() == IInsect.IDLE) {
//						if(entry.getValue().wannaFight() != true) {
//							//Wasp collecting
//							if(entry.getValue().getMaterial() < 3) {
//								target = mGameManager.mFlowers.values().iterator().next();
//								
//								for(final Flower flower: mGameManager.mFlowers.values()){
//									double distance = Double.MAX_VALUE;
//									
//									if(flower.getMaterial() > 0 && (flower.getState() & (Flower.OCCUPIED | Flower.RESERVED)) == 0) {
//										distance = Math.sqrt( (flower.getX() - entry.getValue().getX()) * (flower.getX() - entry.getValue().getX()) + 
//											(flower.getY() - entry.getValue().getY()) * (flower.getY() - entry.getValue().getY()));
//									}
//									
//									if(distance < dis_nearest) {
//										dis_nearest = distance;
//										target = flower;
//									}
//								}
//							}
//							else{
//								target = mGameManager.mWaspCombs.values().iterator().next();
//								
//								for(final WaspComb comb: mGameManager.getWaspCombs().values()) {
//									if((comb.getState() & (IComb.OCCUPIED | IComb.RESERVED | IComb.SURROUNDED)) == 0) {
//										double distance = Math.sqrt( (comb.getX() - entry.getValue().getX()) * (comb.getX() - entry.getValue().getX()) + 
//												(comb.getY() - entry.getValue().getY()) * (comb.getY() - entry.getValue().getY()));
//										
//										if(distance < dis_nearest) {
//											dis_nearest = distance;
//											target = comb;
//										}
//									}
//								}
//							}
//						}
//						else {
//							//Wasp fighting
//							target = mGameManager.mBees.values().iterator().next();
//							
//							for(final Bee bee: mGameManager.mBees.values()){
//								double distance = Math.sqrt( (bee.getX() - entry.getValue().getX()) * (bee.getX() - entry.getValue().getX()) + 
//										(bee.getY() - entry.getValue().getY()) * (bee.getY() - entry.getValue().getY()));
//								
//								if(distance < dis_nearest) {
//									dis_nearest = distance;
//									target = bee;
//								}
//							}
//						}
//						entry.getValue().setTarget(target);
//						entry.getValue().fly();
//						break;
//				
//					}
//					else if(entry.getValue().getState() == IInsect.REGENERATION) {
//						target = mGameManager.mWaspCombs.values().iterator().next();
//						
//						for(final WaspComb comb: mGameManager.getWaspCombs().values()) {
//							if((comb.getState() & (IComb.OCCUPIED | IComb.RESERVED)) == 0) {
//								double distance = Math.sqrt( (comb.getX() - entry.getValue().getX()) * (comb.getX() - entry.getValue().getX()) + 
//										(comb.getY() - entry.getValue().getY()) * (comb.getY() - entry.getValue().getY()));
//								
//								if(distance < dis_nearest) {
//									dis_nearest = distance;
//									target = comb;
//								}
//							}
//						}
//					}
//				}
//			}
//
//			@Override
//			public void reset() {
//				// TODO Auto-generated method stub
//			}
//		});
	}

}
